home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: delta / whiteline CD Series - delta.iso / progtool / c / dev_lib1 / src / dev_misc.s < prev    next >
Text File  |  1995-11-25  |  4KB  |  164 lines

  1. *
  2. * misceallaneous assembler routines
  3. * author     : Jan Kriesten
  4. * last change: 12.04.1993
  5. *
  6.  
  7. *** Globale Variablen:
  8.  
  9. *** Globale Funktionen:
  10.  
  11. *** Systemadressen:
  12.  
  13. _P_COOKIES        EQU        $05a0.w
  14. _SYSBASE        EQU        $04f2.w
  15. _HZ_200            EQU        $04ba.w
  16. _DRVBITS        EQU        $04c2.w
  17.  
  18. ;--------------------------------------------------------------------------
  19. ; getcookie:    Funktion zum Suchen nach einem bestimmten Cookie im
  20. ;                Cookie Jar.
  21. ;
  22. ;    ->    d0:    - 32 Bit Wert des zu suchenden Cookies;
  23. ;        a0: - Zeiger auf Variable für den gefundenen Wert des Cookies
  24. ;    <-    d0:    - TRUE wenn Cookie gefunden, sonst FALSE
  25. getcookie:
  26.         xdef        getcookie            ; Funktion exportieren
  27.         movem.l        a2/a3/d3, -(sp)        ; Register retten
  28.         
  29.         movea.l        a0, a3                ; Variablen retten
  30.         move.l        d0, d3                ;
  31.         
  32.         ; Cookie Jar Adresse holen:        
  33.         pea            .cookies(pc)        ; Adresse der Funktion auf den Stack
  34.         move.w        #$26, -(sp)            ; Opcode für Supexec (XBIOS 38)
  35.         trap        #14                    ; XBIOS-Trap
  36.         addq.l        #6, sp                ; Stack restaurieren
  37.         
  38.         tst.l        d0                    ; ist überhaupt ein Cookie Jar vorhanden?
  39.         beq.b        .end                ; wenn nicht, dann zurück
  40.         
  41.         movea.l        d0, a0                ; Adresse speichern
  42.         moveq        #0, d0                ; erstmal auf FALSE setzen
  43.         
  44. .loop:
  45.         move.l        (a0)+, d1            ; Wert des Cookies holen
  46.         beq.b        .end                ; Ende des Cookie Jars erreicht?
  47.         
  48.         cmp.l        d1, d3                ; Cookie gefunden?
  49.         beq.b        .found                ; 
  50.         
  51.         addq.l        #4, a0                ; nächster Cookie
  52.         bra.b        .loop                ; Schleife
  53.         
  54. .found:
  55.         move.l        (a0), (a3)            ; Wert des Cookies holen
  56.         moveq.l        #1, d0                ; TRUE setzen
  57.         
  58. .end:
  59.         movem.l        (sp)+, a2/a3/d3        ;    Register restaurieren
  60.         rts
  61.         
  62. .cookies:
  63.         move.l        (_P_COOKIES), d0    ; Zeiger auf den Cookie Jar
  64.         rts                                ;
  65.  
  66. ***-----------------------------------------------------------------------------
  67. *** Funktionsname:    get_tos
  68. ***        ->    nichts
  69. ***        <-    nichts
  70. ***
  71. *** Die Funktion holt die TOS-Version über den _sysbase-Vektor des Betriebs-
  72. *** systems.
  73. ***
  74. get_tos:
  75.         xdef        get_tos                ; Funktion exportieren
  76.         
  77.         pea            .get_tos(pc)        ; aufzurufende Funktion
  78.         move.w        #38, -(sp)            ; Supexec (XBIOS 38)
  79.         trap        #14                    ; XBIOS-Trap
  80.         addq.l        #6, sp                ; Stack aufräumen
  81.         
  82.         rts                                ; und zurück
  83.  
  84. .get_tos:
  85.         movea.l        (_SYSBASE), a0        ; (_sysbase-Vektor)->OSHEADER-Struktur
  86.         move.w        2(a0), d0            ; TOS-Version sichern
  87.         rts                                ; und zurück
  88.  
  89. ***-----------------------------------------------------------------------------
  90. *** Funktionsname:    has_drive_u
  91. ***        ->    nichts
  92. ***        <-    TRUE wenn U: existiert, sonst FALSE
  93. ***
  94. *** Die Funktion sieht unter der Adresse _DRVBITS nach, ob ein
  95. *** Laufwerk U: existiert
  96. ***
  97. has_drive_u:
  98.         xdef        has_drive_u            ; Funktion exportieren
  99.         
  100.         pea            .get_drvs(pc)        ; aufzurufende Funktion
  101.         move.w        #38, -(sp)            ; Supexec (XBIOS 38)
  102.         trap        #14                    ; XBIOS-Trap
  103.         addq.l        #6, sp                ; Stack aufräumen
  104.         
  105.         btst.l        #20, d0                ;
  106.         sne            d0                    ; Laufwerk U: vorhanden?
  107.         ext.w        d0                    ; 
  108.         rts                                ;
  109.         
  110. .get_drvs:
  111.         movea.l        #_DRVBITS, a0        ; drvbits-Adresse
  112.         move.l        (a0), d0            ; und Inhalt zurückgeben
  113.         rts                                ;
  114.  
  115. ***-----------------------------------------------------------------------------
  116. *** Funktionsname:    Calc200Hz, Get200Hz
  117. ***        ->    nichts bzw. in d0 die einzustellende Zeit;
  118. ***        <-    d0:    Bisherige Anzahl der 200Hz-Interrupts bzw.
  119. ***                die Timerzahl, wann die Zeit verstrichen sein wird
  120. ***
  121. *** Die Funktion holt die Anzahl der 200Hz-Interrupts aus der
  122. *** Adresse $4ba (_hz_200-Vektor).
  123. ***
  124. Calc200Hz:
  125.         xdef        Calc200Hz            ; Funktion exportieren
  126.         
  127.         add.l        d0, d0                ; timer * 2
  128.         move.l        d0, .len            ; d0 retten
  129.         
  130.         bsr.b        Get200Hz            ; 200Hz-Zähler auslesen
  131.         
  132.         add.l        .len(pc), d0
  133.         rts
  134.         
  135. .len:    dc.l    0
  136.         
  137. Get200Hz:
  138.         xdef        Get200Hz            ; Funktion exportieren
  139.         
  140.         pea            .get_timer(pc)        ; Adresse der Funktion auf den Stack
  141.         move.w        #$26, -(sp)            ; Opcode für Supexec (XBIOS 38)
  142.         trap        #14                    ; XBIOS-Trap
  143.         addq.l        #6, sp                ; Stack restaurieren
  144.         
  145.         rts
  146.         
  147. .get_timer:
  148.         move.l        (_HZ_200), d0        ; Anzahl der Interrupts holen
  149.         rts
  150.  
  151. *****************************************************************************
  152.  
  153.         .DATA
  154.         .EVEN
  155.  
  156. *****************************************************************************
  157.  
  158.         .BSS
  159.         .EVEN
  160.  
  161.  
  162.         .END
  163.  
  164.